package com.trabalho.service;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class EditorController {

	public int contador(String texto) {
		int contador = 0;

		String palavras[] = texto.split("[ ,.;:?!\t\n]");
		
		for (int i = 0; i < palavras.length; i++) {
			if (palavras[i].equals("")) { 
			} else {
				contador++;
			}
		}
		return contador;
	}

	public String contadorDePalavraMaisUsada(Map<String, Integer> map){
		int maior = 0; 
		String palavra = ""; 
		for (Map.Entry<String, Integer> entry : map.entrySet()) {
			if (maior < entry.getValue()) {
				maior = entry.getValue();
				palavra = entry.getKey();
			}
		}
		
		return palavra;
	}
	
	public Integer contadorDeFrase(String texto){
		List<String> lista = Arrays.asList(texto.split("\\. |\\.\n"));
		
		while (lista.remove(""));
		
		return lista.size();
	}
	
	public Integer contadorDeParagrafo(String texto){
		List<String> lista = Arrays.asList(texto.split("\n\t"));
		
		while (lista.remove(""));
		
		return lista.size();
	}
	
	public Integer contarPalavra(String texto, String palavra) {
		Map<String, Integer> map = organizarPalavras(texto);
		return map.get(palavra);
	}
	
	public Map<String, Integer> contadorPalavras(String texto) {
		return organizarPalavras(texto);
    }
	
	public static Map<String, Integer> organizarPalavras(String texto){
        String[] tokens = texto.split("[ ,.;:?!\t\n]");
        List<String> lista = Arrays.asList(tokens);
        
        Map<String, Integer> map = new HashMap<String, Integer>();
        
        if (!(lista.size() == 1 && lista.get(0).equals(""))) {
        	while (lista.remove(""));
        	
            for (String string : lista) {
    			if (map.containsKey(string)) {
    				map.put(string, map.get(string)+1);
    			}else {
    				map.put(string, 1);
    			}
    		}
		}

        return map;
	}

	public String replaceAll(String texto, String subs, String nova) {
		StringBuilder sb = new StringBuilder(texto);
		int index = -1;
		
		while (sb.indexOf(subs, index) != -1) {
			index = sb.indexOf(subs, index + 1);
			sb.replace(index, index+subs.length(), nova);
		}
		return sb.toString();
	}

	public String replace(String texto, String velha, String nova, Integer posicao) {
		StringBuilder sb = new StringBuilder(texto);
		int index = -1;
		for (int i = 0; i < posicao; i++) {
			index = sb.indexOf(velha, index+1);
		}
		sb.replace(index, index+velha.length(), nova);
		return sb.toString();
	}
	
	@SuppressWarnings("resource")
	public String salvaArquivo(String texto) {
		try {
			File arquivo;

			arquivo = new File("arquivo.txt");
			FileOutputStream fos = new FileOutputStream(arquivo);
			fos.write(texto.getBytes());
			fos.close();

			FileReader reader = new FileReader(arquivo);  
            BufferedReader input = new BufferedReader(reader);
            String leu = input.readLine();

			return leu;
			
		} catch (Exception ee) {
			ee.printStackTrace();
			return "Erro ao carregar.";
		}

	}
		
}
